﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Nebular.ExpenseManagement
{
    public interface IAccount
    {
        IEnumerable<Nebular.ExpenseManagement.IUser> Users
        {
            get;
        }

        IEnumerable<IGroup> Groups
        {
            get;
        }

        string Name
        {
            get;
        }

        Guid Id
        {
            get;
        }

        IEnumerable<IDimension> Dimensions
        {
            get;
        }

        IPrincipal SuperUser
        {
            get;
        }

        IUser Me
        {
            get;
        }

        IAccount CreateUser(            
            string name,
            string email,
            IPrincipal approveBy,
            IEnumerable<string> creditCards);

        IAccount UpdateUser(
            Guid id,
            string name,
            string email,
            IPrincipal approveBy,
            IEnumerable<string> creditCards);

        IAccount CreateGroup(IGroup newGroup);

        IAccount CreateDimension(IDimension dimension);

        IAccount CreateTransactions(IEnumerable<ITransaction> newTransactions);

        IEnumerable<ITransaction> OrphanedTransactions
        {
            get;
        }

        IAccount SetSuperUser(IPrincipal superUser);

        System.Collections.Generic.IEnumerable<Nebular.ExpenseManagement.IApprovedTransaction> ApprovedTransactions
        {
            get;
            set;
        }
    }
}
